/***********************************************************************************
 * 文件名： bmlite_config.h
 * 版本： 3
 * 说明：
 *      bmlite组件的配置文件。请将实际文件名命名为以上名称。
 *      必须在 bmlite_config.h 文件中进行合适的配置，本组件才能工作在你期望的状态。
 * 修改记录：
 * 	2021/04/29: 初版。 刘言。
 *  2021/05/07: 增加电池电量功能开关。刘言。
 *  2021/05/11：增加充电器移除判断延时功能开关和对应延时参数设置。刘言。
***********************************************************************************/

#ifndef _BMLITE_CONFIG_H_
#define _BMLITE_CONFIG_H_

#include "hard_wire.h"



// 启用软件控制的充电启动、停止功能，注释掉表示不启用
// 启用后支持单独MOS（无充电IC）控制的充电电路，必须设置 _BMlite_StartChrg 、_BMlite_StopChrg 接口
// 控制逻辑为：关闭充电时（MOS关断）检测到端口电压认为充电器接入，然后开启充电（MOS导通），之后
// 每隔1秒短暂关闭充电来检测充电器是否依然接入，充满后始终关闭充电。
#define _BMLITE_USE_SWST

// 启用电池电量等级（百分比）功能，注释掉表示不启用（可以节省代码量）。
//#define _BMLITE_USE_BATT_LEVEL

// 启用充电器移除判断延时，注释掉表示不启用（可以节省代码量）。
#define _BMLITE_USE_DC_OUT_DELAY
    // 充电器移除持续这个时间后才认为移除(ms)
    #define _BMLITE_DC_OUT_DELAY_TIME       1000

// AD最大值（满量程值）
#define _BMLITE_MAX_ADV                 255

// AD采集模式
// 0：反推模式，使用电池电压作为AD模块正极参考电压，采集一个固定参考电压来反推电池电压
// 1: 正推模式，使用一个固定电压作为AD模块的参考电压，采集分压后的电池电压，必须设置分压比。
#define _BMLITE_AD_MODE                 0
#if (_BMLITE_AD_MODE == 0)
// 可被采集的固定参考电压
#define _BMLITE_VREF                    1200
#else
// ADC模块正极参考电压
#define _BMLITE_ADC_VREF                2500
// 电池电压分压电阻的分压比，正极电阻所占的比例
#define _BMLITE_HIGH_RES                1
// 电池电压分压电阻的分压比，负极电阻所占的比例
#define _BMLITE_LOW_RES                 1
#endif

// 浮充电压(mV)
// 充电时，达到这个电压并持续 _BMLITE_FLOAT_TIME 后标记充满
// 放电时，电压低于这个电压标记非满电
#define _BMLITE_FLOAT_VOLTAGE           4080

// 过充保护电压(mV)
// 充电时，达到这个电压立即标记充满
#define _BMLITE_OVER_VOLTAGE            4250

// 没电电压(mV)
// 未充电时，检测到电压低于这个值标记没电
#define _BMLITE_NO_BATTERY_VOLTAGE      3300

// 没电恢复电压(mV)
// 充电时，检测到电压达到这个值标记有电
#define _BMLITE_HAS_BATTERY_VOLTAGE     3500

// 浮充时间(s)
//  充电时，电压达到 _BMLITE_FLOAT_VOLTAGE 时继续充电这个时间后标记充满
#define _BMLITE_FLOAT_TIME              600



// 设置一些需要引用的外部函数(驱动和组件接口不用再包含头文件)

// 获取用于计算电池电压的AD值
#define _BMLite_GetADValue()            Adc_GetOnce(ADCH_VREF)

// 返回真表示充电器接入
// 如果开启了SWST 将自动处理，仅在 _BMLite_StopChrg 后检测。
#define _BMLite_GetDCStatus()           (OVAL||DCIN)

#ifdef _BMLITE_USE_SWST
// 控制电路开始充电
#define _BMLite_StartChrg()             {if(OVAL)OUTEN_ON;} // 确保输出端口是高电平才开启MOS，否则尾充时会输出（当同时存在尾充时）

// 控制电路停止充电
#define _BMLite_StopChrg()              OUTEN_OFF
#endif

#endif
